﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Synergy
{
    public partial class FormKaiGong : Form
    {
        public FormKaiGong()
        {
            InitializeComponent();
        }

        private void FormKaiGong_Load(object sender, EventArgs e)
        {
            //加载所有设备
            所有设备();
        }

        private void 所有设备()
        {
            string sql = "select distinct parent_id,设备名 from Z_设备";
            DataTable dt = pub.U8GetTable(sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                DataRow dr1 = dt.NewRow();
                dr1["parent_id"] = "-1";
                dr1["设备名"] = "请选择";
                dt.Rows.InsertAt(dr1,0);
                this.comboBox设备.DataSource = dt;
                comboBox设备.ValueMember = "parent_id";
                comboBox设备.DisplayMember = "设备名";
            }
        }

        private void button清空_Click(object sender, EventArgs e)
        {
            textBoxTm.Text = "";
            comboBox设备.SelectedIndex = 0;
        }

        private void button确定_Click(object sender, EventArgs e)
        {
            string selectValue = this.comboBox设备.SelectedValue.ToString();
            string selectText = this.comboBox设备.Text.ToString();
            if (string.IsNullOrWhiteSpace(textBoxTm.Text.Trim()))
            {
                MessageBox.Show("请扫描工票码");
                return;
            }
            if (selectText == "请选择")
            {
                MessageBox.Show("请选择设备名");
                return;
            }

            //检查有没有别的订单使用这个设备
            string sql = $@"SELECT id, 员工号, 员工姓名, parent_id, 机台id, 机台名称, 工位, 生产订单号, 订单行号, 工序, 开工时间, 工票码, 报工数量, 状态 FROM Z_开工 where 工票码 = '{textBoxTm.Text.Trim()}' and 机台名称 = '{selectText}' and 状态 = '开工'";
            DataTable dt = pub.U8GetTable(sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                MessageBox.Show("您的工票已经选择这台设备进行开工了，无需再次开工");
                return;
            }


                sql = $@"SELECT id, 员工号, 员工姓名, parent_id,机台id, 机台名称, 工位, 生产订单号, 订单行号, 工序, 开工时间, 工票码, 报工数量, 状态 FROM Z_开工 where 机台名称 = '{selectText}' and 状态 = '开工'";
             dt = pub.U8GetTable(sql);
            if (dt != null && dt.Rows.Count > 0)
            {
                string 员工姓名 = dt.Rows[0]["员工姓名"].ToString();
                if (MessageBox.Show($"【{员工姓名}】正在使用【{selectText}】进行生产，确定需要继续使用该机器进行生产么？", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK)
                {
                    string 员工号 = "";
                    员工姓名 = "";
                    string parent_id = "";
                    string 机台id = "";
                    string 机台名称 = "";
                    string 工位 = "";
                    string 生产订单号 = "";
                    string 订单行号 = "";
                    string 工序编号 = "";
                    string 工序 = "";
                    string 时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    string 工票码 = "";
                    decimal 报工数量 = 0;
                    string 状态 = "开工";
                    bool flag = ListGxdata(textBoxTm.Text.Trim(), ref 生产订单号, ref 订单行号, ref 工序编号, ref 工序, ref 报工数量, ref 员工号, ref 员工姓名);
                    if (flag)
                    {
                        //塞入使用设备
                        string sqlInsert = $@"insert into Z_开工 (员工号, 员工姓名, parent_id,机台id, 机台名称,                            工位, 生产订单号, 订单行号, 工序, 开工时间, 工票码, 报工数量, 状态) 
                                                  values ('{员工号}','{员工姓名}','{selectValue}','{selectValue}','{selectText}','{selectText}','{生产订单号}','{订单行号}','{工序}','{时间}','{textBoxTm.Text.Trim()}'
                                                    ,'{报工数量}','{状态}')";
                        int r = SqlHelper.SqlHelper.ExecuteNonQuery(sqlInsert);
                        if (r > 0)
                        {
                            MessageBox.Show($"开工成功");
                            textBoxTm.Text = "";
                            comboBox设备.SelectedIndex = 0;
                        }
                        else
                        {
                            MessageBox.Show($"开工失败");
                        }
                    }
                }
            }
            else
            {
                string 员工号 = "";
                string 员工姓名 = "";
                string parent_id = "";
                string 机台id = ""; 
                string 机台名称 = ""; 
                string 工位 = ""; 
                string 生产订单号 = "";
                string 订单行号 = "";
                string 工序编号 = "";
                string 工序 = "";
                string 时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                string 工票码 = ""; 
                decimal 报工数量 = 0; 
                string 状态 = "开工";
              bool flag =  ListGxdata(textBoxTm.Text.Trim(), ref 生产订单号, ref 订单行号,   ref 工序编号, ref 工序, ref 报工数量, ref 员工号, ref 员工姓名);
                if (flag)
                {
                    //塞入使用设备
                    string sqlInsert = $@"insert into Z_开工 (员工号, 员工姓名, parent_id,机台id, 机台名称,                            工位, 生产订单号, 订单行号, 工序, 开工时间, 工票码, 报工数量, 状态) 
                                                  values ('{员工号}','{员工姓名}','{selectValue}','{selectValue}','{selectText}','{selectText}','{生产订单号}','{订单行号}','{工序}','{时间}','{textBoxTm.Text.Trim()}'
                                                    ,'{报工数量}','{状态}')";
                    int r = SqlHelper.SqlHelper.ExecuteNonQuery(sqlInsert);
                    if (r > 0)
                    {
                        MessageBox.Show($"开工成功");
                    }
                    else
                    {
                        MessageBox.Show($"开工失败");
                    }
                }
                else
                {
                    MessageBox.Show($"解析条码失败,请检查");
                }
                
            }
            
        }

        private bool ListGxdata(string tm, ref string 生产订单号, ref string 生产订单行号,  ref string 工序编号,ref string 工序名称,  ref decimal 派工数量, ref string 用户编号,ref string 姓名)
        {
            //条码格式
            if (tm.Split('$').Length <= 8)
            {
                MessageBox.Show("该二维码或报工版本较老，请更新");
                return false;
            }
            else
            {
                用户编号 = tm.Split('$')[8];
            }
            string 物料编号 = "";
            string 加工顺序 = "";
            long 派工id = 0;
            if (!pub.解析条码(tm, out 生产订单号, out 生产订单行号, out 物料编号, out 派工数量, out 加工顺序, out 工序编号, out 派工id, out 派工数量))
            {
                MessageBox.Show("您扫描的条码没法解析，请重扫!", "提示", MessageBoxButtons.OK);
                this.textBoxTm.SelectAll();
                return false;
            }
            //查询人员
            string sqlUser = "select cUser_Name from Z_UA_User where cUSER_Id='" + 用户编号 + "'";
            DataTable tb = pub.SysGetTable(sqlUser);
            if (tb != null && tb.Rows.Count > 0)
            {
                姓名 = tb.Rows[0][0].ToString();
            }
        


            string sqlCheckFaLiao1 = @"select 状态 from z_派工 where id =" + 派工id;
            object 状态1 = SqlHelper.SqlHelper.ExecuteScalar(sqlCheckFaLiao1);
            if (状态1 == null)
            {
                MessageBox.Show("未查询到该工票信息。");
                return false;
            }

            工序名称 = Get工序名称(工序编号);
            return true;
        }

        private string Get工序名称(string 工序编号)
        {
            string sql;
            sql = "select OpCode,Description from sfc_operation where OpCode='" + 工序编号 + "'";
            DataTable tb = pub.U8GetTable(sql);
            try
            {
                return tb.Rows[0]["Description"].ToString();
            }
            catch
            {
                return "";
            }

        }
    }
}
